L-Layer Sinir Ağı
- Gizli katman sayısı artarsa ne olur: Önceki katmanlar basit özellikleri algılayabilir.
- Model, sinir ağının sonraki katmanlarında basit özellikleri bir araya getirirken, giderek daha karmaşık işlevleri öğrenebilir. Örneğin, "bir" işaretimize bakalım.
- Örneğin ilk gizli katman kenarları veya çizgi gibi temel şekilleri öğrenir. Katman sayısı arttıkça, katmanlar dışbükey şekiller veya işaret parmağı gibi karakteristik özellikler gibi daha karmaşık şeyleri öğrenmeye başlar.
- Modelimizi oluşturalım
- Öğrenme oranı, yineleme sayısı, gizli katman sayısı, gizli birim sayısı, aktivasyon fonksiyonlarının türü gibi seçmemiz gereken bazı hiperparametreler var. Owww çok fazla :)
- Derin öğrenme dünyasında çok zaman harcıyorsanız, bu hiperparametreler sezgisel olarak seçilebilir.
- Ancak çok fazla zaman harcamazsanız, en iyi yol google'da aramaktır, ancak gerekli değildir. En iyisini bulmak için hiperparametreleri denemeniz gerekir.
- Bu eğitimde modelimiz sırasıyla 8 ve 4 düğümlü 2 gizli katmana sahip olacaktır. Çünkü gizli katman ve düğüm sayısı arttığında çok fazla zaman almaktadır.
- Aktivasyon fonksiyonu olarak sırasıyla relu (birinci gizli katman), relu (ikinci gizli katman) ve sigmoid (çıktı katmanı) kullanacağız.
- İterasyon sayısı 100 olacaktır.
- Yöntemimiz önceki bölümlerle aynı ancak derin öğrenmenin arkasındaki mantığı öğrendikçe işimizi kolaylaştırabilir ve daha derin sinir ağları için keras kütüphanesini kullanabiliriz.
- Öncelikle x_train, x_test, y_train ve y_test'imizi yeniden şekillendirelim.
# reshaping
x_train, x_test, y_train, y_test = x_train.T, x_test.T, y_train.T, y_test.T
print("x train: ",x_train.shape)
print("x test: ",x_test.shape)
print("y train: ",y_train.shape)
print("y test: ",y_test.shape)
x train: (348, 4096) x test: (62, 4096)
y train: (348, 1)
y test: (62, 1)
Keras kütüphanisi ile uygulama
Keras kütüphanesinin bazı parametrelerine bakalım:
- birimler: düğümün çıktı boyutları
- kernel_initializer: ağırlıkları başlatmak için
- aktivasyon fonksiyonu: aktivasyon fonksiyonu, relu kullanıyoruz
- input_dim: resimlerimizdeki piksel sayısı olan giriş boyutu (4096 piksel)
- optimizer: adam optimizer kullanıyoruz
- Adam, sinir ağlarını eğitmek için en etkili optimizasyon algoritmalarından biridir.
- Adam'ın bazı avantajları, nispeten düşük bellek gereksinimleri ve genellikle çok az hiperparametre ayarıyla bile iyi çalışmasıdır.
- loss: cost fonksiyonu ile aynıdır. Bu arada cost fonksiyonunun adı önceki bölümlerde kullandığımız çapraz entropi cost fonksiyonudur. $$J = - \frac{1}{m} \sum\limits_{i = 0}^{m} \large\left(\small y^{(i)}\log\left(a^{[2] (i)}\right) + (1-y^{(i)})\log\left(1- a^{[2] (i)}\right) \large \right) \small \tag{6}$$
- metrikler: Doğruluk (accuracy) oranıdır.
- cross_val_score: çapraz doğrulama kullanın. Çapraz doğrulamayı bilmiyorsanız internetten araştırın.
- epochs: iterasyon sayısı.
# Evaluating the ANN
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
from keras.models import Sequential # initialize neural network library
from keras.layers import Dense # build our layers library
def build_classifier():
classifier = Sequential() # initialize neural network
classifier.add(Dense(units = 8, kernel_initializer = 'uniform', activation = 'relu', input_dim = x_train.shape[1]))
classifier.add(Dense(units = 4, kernel_initializer = 'uniform', activation = 'relu'))
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
return classifier
classifier = KerasClassifier(build_fn = build_classifier, epochs = 100)
accuracies = cross_val_score(estimator = classifier, X = x_train, y = y_train, cv = 3)
mean = accuracies.mean()
variance = accuracies.std()
print("Accuracy mean: "+ str(mean))
print("Accuracy variance: "+ str(variance))
Diğer derin öğrenme kütüphaneleri
- Son birkaç yılda bir çok organizasyon ve komite derin öğrenme tekniklerini uygulamak ve daha fazla basitleştirmek için Python frameworkler geliştirdi. Bu frameworkler farklı iç mekanizmaları olmasına rağmen hemen hemen aynı operatörleri kullanır. Bunların çoğu açık kaynak kodlu olup ücretsizdir.
Tensorflow (hiç şüphesin en popüler ve en yaygın kullanılanı). Bu açık kaynak kodlu framework 2015 yılında Google tarafından geliştirildi. Burada tüm matematiksel işlemler düğüm olarak ifade edilir ve bu düğümler arasındaki kenarlar tensörlerdir. Bu framework çok esnek hesaplamalar GPU ve CPU ya dağıtılır.(https://playground.tensorflow.org/#activation=tanh&batchSize=10&dataset=spiral®Dataset=reg-plane&learningRate=0.03®ularizationRate=0&noise=0&networkShape=4,2&seed=0.02706&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false)
Caffe ve Pytorch son zamanlarda güçlerini birleştirdi. Pytorch facebook yapay zeka takımı tarafından geliştirildi.
Theano da ilk derin öğrenme kütüphanelerinden birisidir. Açık kaynak kodlu Montreal üniversitesi tarafından 2007 yılında geliştirilmiştir. En son versiyonu 2017 de yayınlandı. Bir çok bilimsel çalışmada kullanılmaktadır. Geliştirme takımı yeni versiyonlarının olmayacağını duyurdu.
Keras, Python'da yazılmış açık kaynaklı bir sinir ağı kütüphanesidir. Keras TensorFlow, Microsoft Cognitive Toolkit veya Theano ile beraber çalışabilir.
KAYNAK ÖNERİSİ
- Kaggle ve GitHub çok büyük bir kaynak kesinlikle üye olun ve gelişmeleri takip edin..
- Andrew Ng'nin (Stanford Üniversitesi, Elektrik Mühendisliği ve Bilgisayar Bilimleri'nde profesör) youtube dan videolarını takip edin ve eğitim videolarını izleyin.
- Google Scholar'dan güncel deep learning makaleleri okuyun.